--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/test_android_meshchat_wrapper.py 4bd787ccd70a459a02eececca3f942f0e64ec4ce (4bd787cc) Text, 3.14 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Resilience checks for android/app/src/main/python/meshchat_wrapper.py."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787importlib
Tff7b72import T7ee787sys
Tff7b72import T7ee787threading
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Te6edf3_REPO_ROOT Tff7b72= Te6edf3PathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparentsTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3_ANDROID_PY Tff7b72= Te6edf3_REPO_ROOT Tff7b72/ Ta5d6ff"Ta5d6ffandroidTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffappTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffmainTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffpythonTa5d6ff"
Tff7b72if Tffa657strTb4b4b4(Te6edf3_ANDROID_PYTb4b4b4) Tff7b72not Tff7b72in Te6edf3sysTff7b72.Td2a8ffpathTb4b4b4:
Te6edf3sysTff7b72.Td2a8ffpathTff7b72.Td2a8ffinsertTb4b4b4(T79c0ff0Tb4b4b4, Tffa657strTb4b4b4(Te6edf3_ANDROID_PYTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_start_server_second_call_skips_while_main_blocksTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787meshchatxT7ee787.T7ee787meshchat Tff7b72as T7ee787mm
Te6edf3entered Tff7b72= Te6edf3threadingTff7b72.Td2a8ffEventTb4b4b4(Tb4b4b4)
Te6edf3release Tff7b72= Te6edf3threadingTff7b72.Td2a8ffEventTb4b4b4(Tb4b4b4)
Te6edf3callsTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8fffake_mainTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3callsTff7b72.Td2a8ffappendTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3enteredTff7b72.Td2a8ffsetTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3releaseTff7b72.Td2a8ffwaitTb4b4b4(Te6edf3timeoutTff7b72=T79c0ff10.0Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffsetattrTb4b4b4(Te6edf3mmTb4b4b4, Ta5d6ff"Ta5d6ffmainTa5d6ff"Tb4b4b4, Te6edf3fake_mainTb4b4b4)
Tff7b72import T7ee787meshchat_wrapper
Te6edf3importlibTff7b72.Td2a8ffreloadTb4b4b4(Te6edf3meshchat_wrapperTb4b4b4)
Te6edf3th Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(
Te6edf3targetTff7b72=Tff7b72lambdaTb4b4b4: Te6edf3meshchat_wrapperTff7b72.Td2a8ffstart_serverTb4b4b4(T79c0ff8000Tb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4,
Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Te6edf3thTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3enteredTff7b72.Td2a8ffwaitTb4b4b4(Te6edf3timeoutTff7b72=T79c0ff10.0Tb4b4b4)
Tff7b72assert Te6edf3calls Tff7b72== Tb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3meshchat_wrapperTff7b72.Td2a8ffstart_serverTb4b4b4(T79c0ff8000Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72assert Te6edf3calls Tff7b72== Tb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3releaseTff7b72.Td2a8ffsetTb4b4b4(Tb4b4b4)
Te6edf3thTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3timeoutTff7b72=T79c0ff10.0Tb4b4b4)
Tff7b72def Td2a8fftest_start_server_hook_failure_still_invokes_mainTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787meshchatxT7ee787.T7ee787meshchat Tff7b72as T7ee787mm
Te6edf3callsTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3monkeypatchTff7b72.Td2a8ffsetattrTb4b4b4(Te6edf3mmTb4b4b4, Ta5d6ff"Ta5d6ffmainTa5d6ff"Tb4b4b4, Tff7b72lambdaTb4b4b4: Te6edf3callsTff7b72.Td2a8ffappendTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffboomTb4b4b4(Tff7b72*Te6edf3_aTb4b4b4, Tff7b72*Tff7b72*Te6edf3_kTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6ffhook testTa5d6ff"Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffsetattrTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.android_push_bridge.install_websocket_hookTa5d6ff"Tb4b4b4, Te6edf3boomTb4b4b4)
Tff7b72import T7ee787meshchat_wrapper
Te6edf3importlibTff7b72.Td2a8ffreloadTb4b4b4(Te6edf3meshchat_wrapperTb4b4b4)
Te6edf3meshchat_wrapperTff7b72.Td2a8ffstart_serverTb4b4b4(T79c0ff8000Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72assert Te6edf3calls Tff7b72== Tb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72def Td2a8fftest_start_server_clears_stale_storage_lockTb4b4b4(Te6edf3monkeypatchTb4b4b4, Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787meshchatxT7ee787.T7ee787meshchat Tff7b72as T7ee787mm
Te6edf3callsTb4b4b4: Tffa657listTb4b4b4[Tffa657intTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3monkeypatchTff7b72.Td2a8ffsetattrTb4b4b4(Te6edf3mmTb4b4b4, Ta5d6ff"Ta5d6ffmainTa5d6ff"Tb4b4b4, Tff7b72lambdaTb4b4b4: Te6edf3callsTff7b72.Td2a8ffappendTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)
Te6edf3storage Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatxTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"
Te6edf3storageTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3lock_path Tff7b72= Te6edf3storage Tff7b72/ Ta5d6ff"Ta5d6ff.meshchatx.lockTa5d6ff"
Te6edf3lock_pathTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff12345Ta5d6ff"Tb4b4b4)
Tff7b72import T7ee787meshchat_wrapper
Te6edf3importlibTff7b72.Td2a8ffreloadTb4b4b4(Te6edf3meshchat_wrapperTb4b4b4)
Te6edf3meshchat_wrapperTff7b72.Td2a8ffstart_serverTb4b4b4(T79c0ff8000Tb4b4b4, Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3calls Tff7b72== Tb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72assert Tff7b72not Te6edf3lock_pathTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_clear_stale_storage_lock_missing_is_okTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787meshchat_wrapper
Te6edf3importlibTff7b72.Td2a8ffreloadTb4b4b4(Te6edf3meshchat_wrapperTb4b4b4)
Te6edf3meshchat_wrapperTff7b72.Td2a8ff_clear_stale_storage_lockTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffmissingTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3storage Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffstorageTa5d6ff"
Te6edf3storageTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3meshchat_wrapperTff7b72.Td2a8ff_clear_stale_storage_lockTb4b4b4(Tffa657strTb4b4b4(Te6edf3storageTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_start_server_systemexit_includes_causeTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787pytest
Tff7b72import T7ee787meshchatxT7ee787.T7ee787meshchat Tff7b72as T7ee787mm
Tff7b72def Td2a8fffake_mainTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6ffstorage lock held by pid 12345Ta5d6ff"Tb4b4b4)
Tff7b72except Tf85149RuntimeError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149SystemExitTb4b4b4(T79c0ff1Tb4b4b4) Tff7b72from T7ee787exc
Te6edf3monkeypatchTff7b72.Td2a8ffsetattrTb4b4b4(Te6edf3mmTb4b4b4, Ta5d6ff"Ta5d6ffmainTa5d6ff"Tb4b4b4, Te6edf3fake_mainTb4b4b4)
Tff7b72import T7ee787meshchat_wrapper
Te6edf3importlibTff7b72.Td2a8ffreloadTb4b4b4(Te6edf3meshchat_wrapperTb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149RuntimeErrorTb4b4b4) Tff7b72as Te6edf3excinfoTb4b4b4:
Te6edf3meshchat_wrapperTff7b72.Td2a8ffstart_serverTb4b4b4(T79c0ff8000Tb4b4b4, Tff7b72NoneTb4b4b4)
Te6edf3message Tff7b72= Tffa657strTb4b4b4(Te6edf3excinfoTff7b72.Td2a8ffvalueTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffcode=1Ta5d6ff" Tff7b72in Te6edf3message
Tff7b72assert Ta5d6ff"Ta5d6ffstorage lock held by pid 12345Ta5d6ff" Tff7b72in Te6edf3message
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────